import { cloud } from '@hw-agconnect/cloud-server';
import { Student } from './Student'

//云数据库 实例化对象
const collection = cloud.database({ zoneName: 'Demo' }).collection(Student);

//云对象操作云数据库
export class Cloudobjectdemo {
  //查询所有数据
  query() {
    return collection.query().get();
  }

  //增加数据   insert插入 可以做新增 切记id具有唯一性做插入时不要重复
  insert(value: Student) {
    return new Promise((resolve, reject) => {
      collection.insert(value)
        .then(result => resolve({ result }))
        .catch(err => reject(err))
    })
  }

  //删除数据 delete
  delete(value: Student) {
    return new Promise((resolve, reject) => {
      collection.delete(value)
        .then(result => resolve({ result }))
        .catch(err => reject(err))
    })
  }

  //修改数据  upsert即可以做修改，也可以做增加
  upsert(value: Student) {
    return new Promise((resolve, reject) => {
      collection.upsert(value)
        .then(result => resolve({ result }))
        .catch(err => reject(err))
    })
  }

  //根据名字查询数据
  queryByName(name?: string, hobby?: string) {
    return new Promise((reslove, reject) => {
      //一个参数时，使用单一查询
      // collection
      //   .query()//查询
      //   .equalTo('stuName', name)//查询条件
      //   .limit(1)//限制只查询n条
      //   .get()
      //   .then(result => {
      //     if (result && result.length > 0) {
      //       reslove(result[0])
      //     } else {
      //       reslove(null)
      //     }
      //   })
      //   .catch(err => reject(err))

      // 两个参数时，需要动态查询
      // 创建基础查询对象
      let query = collection.query();
      // 动态构建条件：两个参数都存在时用 OR 连接
      if (name && hobby) {
        console.log('联合查询')
        query = query.equalTo('stuName', name).and().equalTo('stuhobby', hobby);
      } else if (name) { // 只有名字参数时
        console.log('名字查询')
        query = query.equalTo('stuName', name);
      } else if (hobby) { // 只有爱好参数时
        console.log('爱好查询')
        query = query.equalTo('stuhobby', hobby);
      } else { // 无参数时直接返回空（根据需求也可改为全量查询）
        return;
      }
      // 执行查询
      query
        .limit(5)// 限制1条结果
        .get()
        .then(result => {
          if (result && result.length > 0) {
            reslove(result)
          } else {
            reslove(null)
          }
        })
        .catch(err => reject(err))
    })
  }
}
